package com.penghaisoft.microwms.material.web.outwarehouse.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.penghaisoft.microwms.common.Constant;
import com.penghaisoft.microwms.common.data.model.MdModel;
import com.penghaisoft.microwms.common.data.model.RawRequisition;
import com.penghaisoft.microwms.common.dto.Resp;
import com.penghaisoft.microwms.common.page.Pager;
import com.penghaisoft.microwms.common.service.BaseService;
import com.penghaisoft.microwms.common.util.CommonUtils;
import com.penghaisoft.microwms.common.wms.model.RawRequisitionHis;
import com.penghaisoft.microwms.material.web.expose.dao.MdModelMapper;
import com.penghaisoft.microwms.material.web.outwarehouse.dao.RawRequisitionHisMapper;
import com.penghaisoft.microwms.material.web.outwarehouse.dao.RawRequisitionMapper;
import com.penghaisoft.microwms.material.web.outwarehouse.service.IRawRequisitionService;

/**
 * @Description 原材料领料单
 * @author luoteng
 * @date 2018年6月19日 上午10:03:58
 * @version 1.0
 */
@Service("rawRequisitionService")
public class RawRequisitionServiceImpl extends BaseService implements
		IRawRequisitionService {
	@Resource
	private RawRequisitionMapper rawRequisitionMapper;
	
	@Resource
	private RawRequisitionHisMapper rawRequisitionHisMapper;
	
	@Resource
	private MdModelMapper mdModelMapper;

	/**
	 * 新增记录
	 * 
	 * @param baseResource
	 * @return
	 */
	@Override
	public Resp create(RawRequisition rawRequisition) {
		rawRequisitionMapper.create(rawRequisition);
		return success();
	}
	
	/**
	 * 删除记录（逻辑删除）
	 * 
	 * @param baseResource
	 * @return
	 */
	@Override
	public Resp delete(RawRequisition rawRequisition) {
		rawRequisitionMapper.delete(rawRequisition);
		return success();
	}

	/**
	 * 查询列表
	 * 
	 * @param pager
	 * @param baseResource
	 * @return
	 */
	@Override
	public Pager<RawRequisition> findListByCondition(int page, int rows,
			RawRequisition condition) {
		Pager<RawRequisition> pager = new Pager<>();
		pager.setPage(page);
		pager.setRows(rows);
		condition.preQuery();
		long size = rawRequisitionMapper.queryCount(condition);
		List<RawRequisition> records = new ArrayList<RawRequisition>();
		if (size > 0) {
			records = rawRequisitionMapper.queryList(pager, condition);
		}
		pager.setRecords(records);
		pager.setTotalCount(size);
		return pager;
	}

	/**
	 * 查询单条
	 * 
	 * @param id
	 * @return
	 */
	@Override
	public RawRequisition findById(String id) {
		return rawRequisitionMapper.queryById(id);
	}

	/**
	 * 修改记录
	 * 
	 * @param baseResource
	 * @return
	 */
	@Override
	public Resp update(RawRequisition rawRequisition) {
		rawRequisitionMapper.updateBySelect(rawRequisition);
		return success();
	}
	
	/**
	 * @Title batchNormalInsert
	 * @Description 拉料单 普通 批量插入
	 * @author luoteng
	 * @date 2018年6月19日:下午1:52:09
	 * @param list
	 * @return
	 */
	@Override
	@Transactional
	public Resp batchNormalInsert(List<RawRequisition> list) {
		Date now = new Date();
		if(list == null || list.isEmpty()){
			throw new RuntimeException("领料单内数据为空！" );
		}else{
			RawRequisition tmp = list.get(0);
			if(tmp.getRequisitionType() == null || tmp.getRequisitionType().equals("")){
				throw new RuntimeException("领料单（" + tmp.getRequisitionNo() + ")内领料单类型为空！" );
			}else if(tmp.getRequisitionType().equals("0")){
				if(list.size() > 2){
					throw new RuntimeException("领料单（" + tmp.getRequisitionNo() + ")内型号个数大于2！" );
				}else if(list.size() == 1){
					throw new RuntimeException("领料单（" + tmp.getRequisitionNo() + ")内型号个数小于2！" );
				}
			}
		}
		
		for(RawRequisition rawRequisition : list){
			RawRequisition tmp = new RawRequisition();
			tmp.setRequisitionNo(rawRequisition.getRequisitionNo());
//			成品型号类型3璃钢-螺旋钢管 C-BLG-W:玻璃钢-无缝钢管 C-W:弯头 C-ST:三通 C-BJ:变径 C-G:固定支架
//			if(rawRequisition.getProductType() == null || rawRequisition.getProductType().equals("")){
//				throw new RuntimeException("领料单（" + rawRequisition.getRequisitionNo() + ")内成品型号为空！" );
//			}
			if(rawRequisition.getRequisitionType() == null || rawRequisition.getRequisitionType().equals("")){
				throw new RuntimeException("领料单（" + rawRequisition.getRequisitionNo() + ")内领料单类型为空！" );
			}
//			else if(Constant.PRO_MODEL_TYPE_WT.equals(rawRequisition.getProductType()) || Constant.PRO_MODEL_TYPE_ST.equals(rawRequisition.getProductType())
//					|| Constant.PRO_MODEL_TYPE_BJ.equals(rawRequisition.getProductType()) || Constant.PRO_MODEL_TYPE_G.equals(rawRequisition.getProductType())){
////				领料单类型：0：普通（PE管匹配钢管）1：返修（PE管匹配自身长度）2；管件（PE管匹配自身长度）
//				tmp.setRequisitionType("2");
//			}else{
////				领料单类型：0：普通（PE管匹配钢管）1：返修（PE管匹配自身长度）2；管件（PE管匹配自身长度）
//				tmp.setRequisitionType("0");
//			}

			
			if(rawRequisition.getModel() == null || rawRequisition.getModel().equals("")){
				throw new RuntimeException("MES传递的数据型号为空！" );
			}else{
				tmp.setModel(rawRequisition.getModel());
				
				MdModel model = new MdModel();
				model.setModel(rawRequisition.getModel());
				List<MdModel> mdList = mdModelMapper.queryByAny(model);
				if(mdList != null && !mdList.isEmpty()) {
					MdModel mdTmp = mdList.get(0);
					rawRequisition.setModelDesc(mdTmp.getModelDescZh());
				}
			}
			
			tmp.setActiveFlag("1");
			tmp.setRequisitionType(rawRequisition.getRequisitionType());
			
			List<RawRequisition> tmpList = rawRequisitionMapper.queryByAny(tmp);
			if(tmpList != null && !tmpList.isEmpty()){
//				领料单类型：0：普通（PE管匹配钢管）1：返修（PE管匹配自身长度） 2；管件（PE管匹配自身长度）3：辅料 4：补料
				if(rawRequisition.getRequisitionType().equals("0") || rawRequisition.getRequisitionType().equals("1") || rawRequisition.getRequisitionType().equals("2")) {
					throw new RuntimeException("领料单（" + rawRequisition.getRequisitionNo() + ")内型号（" + rawRequisition.getModel() + "）重复或者已经存在！" );
				}else if(rawRequisition.getRequisitionType().equals("3")) {
					RawRequisition updateOb = tmpList.get(0);
//					领料单状态 0：新建 1：发货中 2：发货完成
					updateOb.setRequisitionStatus("1");
					updateOb.setRequireAmountAdd(rawRequisition.getRequireAmount());
					updateOb.setGmtModified(now);
					rawRequisitionMapper.updateBySelect(updateOb);
				}else if(rawRequisition.getRequisitionType().equals("4")) {
					rawRequisition.setRequisitionStatus("0");
					rawRequisition.setActiveFlag("1");
					rawRequisition.setCreateBy("MES");
					rawRequisition.setGmtCreate(now);
//					MES回传标识 0：未传给MES;1：已传MES;2：MES确认
					rawRequisition.setMesFlag("0");
					rawRequisitionMapper.create(rawRequisition);
				}
			}else{
////				领料单类型：0：普通（PE管匹配钢管）1：返修（PE管匹配自身长度） 2；管件（PE管匹配自身长度）
//				rawRequisition.setRequisitionType("0");
//				领料单状态 0：新建 1：发货中 2：发货完成
				rawRequisition.setRequisitionStatus("0");
				rawRequisition.setActiveFlag("1");
				rawRequisition.setCreateBy("MES");
				rawRequisition.setGmtCreate(now);
//				MES回传标识 0：未传给MES;1：已传MES;2：MES确认
				rawRequisition.setMesFlag("0");
				rawRequisitionMapper.create(rawRequisition);
			}
		}
		return success();
	}
	
	/** 
	 * @Title batchNormalHisInsert
	 * @Description 拉料单 普通 批量插入【失败时，插入记录】
	 * @author luoteng
	 * @date 2018年6月19日:下午4:01:44
	 * @param list
	 * @param errorMsg
	 * @return
	 */
	@Override
	@Transactional
	public Resp batchNormalHisInsert(List<RawRequisition> list, String errorMsg) {
		Date now = new Date();
		for(RawRequisition rawRequisition : list){
			RawRequisitionHis rawRequisitionHis = new RawRequisitionHis();
			try{
				CommonUtils.reflectObj(rawRequisition, rawRequisitionHis);
			}catch(Exception e){
				e.printStackTrace();
			}
			
			rawRequisitionHis.setErrMsg(errorMsg);
//			领料单类型：0：普通（PE管匹配钢管）1：返修（PE管匹配自身长度） 2；管件（PE管匹配自身长度）
			rawRequisitionHis.setRequisitionType("0");
//			领料单状态 0：新建 1：发货中 2：发货完成
			rawRequisition.setRequisitionStatus("0");
			rawRequisitionHis.setActiveFlag("1");
			rawRequisitionHis.setCreateBy("MES");
			rawRequisitionHis.setGmtCreate(now);
			rawRequisitionHisMapper.create(rawRequisitionHis);
		}
		return success();
	}
	
	
	/**
	 * @Title batchRepairInsert
	 * @Description 拉料单 返修 批量插入
	 * @author luoteng
	 * @date 2018年6月19日:下午1:52:09
	 * @param list
	 * @return
	 */
	@Override
	@Transactional
	public Resp batchRepairInsert(List<RawRequisition> list) {
		Resp resp = new Resp();
		Date now = new Date();
		for(RawRequisition rawRequisition : list){
			if(!rawRequisition.getModelType().equals(Constant.MODEL_PE)){
				resp.setCode(Constant.FAIL);
				resp.setMsg("返修领料单只能包含PE管！");
				return resp;
			}
			
			if(rawRequisition.getModel() != null) {
				MdModel model = new MdModel();
				model.setModel(rawRequisition.getModel());
				List<MdModel> mdList = mdModelMapper.queryByAny(model);
				if(mdList != null && !mdList.isEmpty()) {
					MdModel tmp = mdList.get(0);
					rawRequisition.setModelDesc(tmp.getModelDescZh());
				}
			}
			
//			领料单类型：0：普通（PE管匹配钢管）1：返修（PE管匹配自身长度） 2；管件（PE管匹配自身长度）
			rawRequisition.setRequisitionType("1");
//			领料单状态 0：新建 1：发货中 2：发货完成
			rawRequisition.setRequisitionStatus("0");
			rawRequisition.setActiveFlag("1");
			rawRequisition.setCreateBy("MES");
			rawRequisition.setGmtCreate(now);
//			MES回传标识 0：未传给MES;1：已传MES;2：MES确认
			rawRequisition.setMesFlag("0");
			rawRequisitionMapper.create(rawRequisition);
			
//			RawRequisition tmp = new RawRequisition();
//			tmp.setRequisitionNo(rawRequisition.getRequisitionNo());
////			0 新建 1 发货中 2发货完成 3扫码完成
//			tmp.setRequisitionStatus("1");
//			rawRequisitionMapper.updateByRequisitionNo(tmp);
		}
		return success();
	}
}
